<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>



//【示例1】中括号运算符（[]）不仅可以存取数组元素的值，还可以存取对象属性值。
	读取数组元素的值
var a =[1,"x",true,{}]; 	// 定义数组a
alert(a[1]); 			// 返回"x"。读取数组中第2个元素的值
alert(a[3]); 			// 返回[object Object]。读取数组中第4个元素的值


var a =[1,"x",true,{}]; 	// 定义数组a
a[3] = false; 				// 在数组第4个元素中写入false布尔值
alert(a[3]); 				// 返回false。元素原来存储的对象被覆盖

var a ={					// 定义对象a
   x : 1, 					// 定义对象属性x
   y : function(){			// 定义对象方法y
     return 2; 				// 返回值2
   }
};
alert(a["x"]);				// 返回1。读取属性x的值
alert(a["y"]());			// 返回2。调用方法y


var a ={					// 定义对象a
   x : 1, 					// 定义对象属性x
   y : function(){			// 定义对象方法y
     return 2; 				// 返回值2
   }
};
a["x"] = 3; 				// 重置属性x的值
alert(a["x"]);				// 返回3。读取属性x的值
a["y"] = function(){		// 更新方法y
    return 4;
}
alert(a["y"]());			// 返回4。调用方法y

//【示例2】点号运算符（.）可以存取对象属性值，它比中括号灵活、方便，因为点号运算符右侧可以直接指定属性的标识符，而不是属性名称的字符串或变量。
var a ={					// 定义对象a
   x : 1,
};
alert(a.x); 				// 返回1。读取对象属性a的值
a.x = 2; 					// 重写对象属性a的值
alert(a.x); 				// 返回2。再次读取对象属性a的值

var b = "x";				// 把属性x的标识符名作为字符串存储在变量b中
var a ={					// 定义对象a
   x : 1					// 定义属性x
};
alert(a[b]); 				// 返回1。通过变量间接获取对象a的属性x的值
alert(a.b); 				// 返回undefined。点运算符无法识别这种变量引用法

//【示例3】对于下面两种方法都可以读取数组a中第二个元素的值。虽然说a["1"]中参数是一个字符串，但是中括号运算符能够把它转换为数字。
var a = ["x",true,{}]; 	// 定义数组
alert(a[1]); 				// 返回true
alert(a["1"]);				// 返回true

var a = { 					// 定义对象
    "true":1, 			
	// 定义属性"true"。为了避免与系统标识符冲突，这里加了引号，以表示它是一个字符串
    "false":0
	// 定义属性"false"。为了避免与系统标识符冲突，这里加了引号，以表示它是一个字符串
}
alert(a[true]); 
//返回1。此时中括号运算符会先把布尔值true转换为字符串"true"，而不是数值1
alert(a[false]); 
//返回0。此时中括号运算符会先把布尔值false转换为字符串"false"，而不是数值0
//【示例4】下面代码能够遍历客户端window对象的所有属性以及属性值。这里主要使用了中括号运算符来操作document对象的属性，这种批量读取属性及其值的操作，如果使用点号运算符来实现是非常困难的，甚至是不可能的。
for(o in window){ 		// 遍历window对象成员，此时对象被看做关联数组
   document.write("window." + o + " = " + window[o] + "<br />");
}

var a = { 				// 定义对象
    x:1 					// 定义属性
}
alert(a.y); 			// 返回undefined。读取不出来的成员

var a = { 				// 定义对象
    x:1				 	// 定义属性
}
alert(a.y); 			// 返回undefined。说明不存在该成员
a.y = 2; 				// 新建属性，并写入值
alert(a.y); 			// 返回2。说明存在该属性，且值为2
a.y = function(){		// 重写该成员，设置该成员为一个方法，返回值为3
   return 3;
};
alert(a.y());			// 返回3。再次调用该方法




</script>
</head>
<body>




</body>
</html>
